Submission¶

Put the ipynb file and html file in the github branch you created in the last assignment and submit the link to the commit in brightspace

In [91]:
from plotly.offline import init_notebook_mode
import plotly.io as pio
import plotly.express as px

init_notebook_mode(connected=True)
pio.renderers.default = "plotly_mimetype+notebook"
In [92]:
#load data
df = px.data.gapminder()
df
Out[92]:
country continent year lifeExp pop gdpPercap iso_alpha iso_num
0 Afghanistan Asia 1952 28.801 8425333 779.445314 AFG 4
1 Afghanistan Asia 1957 30.332 9240934 820.853030 AFG 4
2 Afghanistan Asia 1962 31.997 10267083 853.100710 AFG 4
3 Afghanistan Asia 1967 34.020 11537966 836.197138 AFG 4
4 Afghanistan Asia 1972 36.088 13079460 739.981106 AFG 4
... ... ... ... ... ... ... ... ...
1699 Zimbabwe Africa 1987 62.351 9216418 706.157306 ZWE 716
1700 Zimbabwe Africa 1992 60.377 10704340 693.420786 ZWE 716
1701 Zimbabwe Africa 1997 46.809 11404948 792.449960 ZWE 716
1702 Zimbabwe Africa 2002 39.989 11926563 672.038623 ZWE 716
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298 ZWE 716

1704 rows × 8 columns

Question 1:¶

Recreate the barplot below that shows the population of different continents for the year 2007.

Hints:

  • Extract the 2007 year data from the dataframe. You have to process the data accordingly
  • use plotly bar
  • Add different colors for different continents
  • Sort the order of the continent for the visualisation. Use axis layout setting
  • Add text to each bar that represents the population
In [93]:
# YOUR CODE HERE
df_2007 = df[df["year"]==2007]
df_2007_new = df_2007.groupby('continent').sum(numeric_only=True)
fig = px.bar(df_2007_new, x='pop', y=df_2007_new.index, color=df_2007_new.index)

#df_2007_new = df_2007_new.sort_values(by='pop', ascending=True)
fig.update_yaxes(categoryorder='total ascending')
fig.update_traces(
    texttemplate='%{value:.2s}', 
    textposition='outside' 
)

Question 2:¶

Sort the order of the continent for the visualisation

Hint: Use axis layout setting

In [94]:
# YOUR CODE HERE
#see question 1

Question 3:¶

Add text to each bar that represents the population

In [95]:
# YOUR CODE HERE
#see question 1

Question 4:¶

Thus far we looked at data from one year (2007). Lets create an animation to see the population growth of the continents through the years

In [96]:
# YOUR CODE HERE
# YOUR CODE HERE
#df_2007 = df[df["year"]==2007]
#df_2007_new = df_2007.groupby('continent').sum(numeric_only=True)
#fig = px.bar(df_2007_new, x='pop', y=df_2007_new.index, color=df_2007_new.index)

#df_2007_new = df_2007_new.sort_values(by='pop', ascending=True)
#fig.update_yaxes(categoryorder='total ascending')
#fig.update_traces(
#    texttemplate='%{value:.2s}', 
#    textposition='outside' 
#)
df_new = df.groupby('continent').sum(numeric_only=True)
fig = px.bar(df, x='pop', y='continent', color='continent', animation_frame='year', animation_group='country', range_x = [0,4e9])
fig.update_yaxes(categoryorder='total ascending')
fig

Question 5:¶

Instead of the continents, lets look at individual countries. Create an animation that shows the population growth of the countries through the years

In [97]:
# YOUR CODE HERE
fig = px.bar(df, x='pop', y='country', color='continent', animation_frame='year', animation_group='country', range_x = [0,1.3e9])
fig.update_yaxes(categoryorder='total ascending')
fig

Question 6:¶

Clean up the country animation. Set the height size of the figure to 1000 to have a better view of the animation

In [98]:
# YOUR CODE HERE
fig = px.bar(df, x='pop', y='country', color='continent', animation_frame='year', animation_group='country', range_x = [0,1.5e9],height=1000)
fig.update_yaxes(categoryorder='total ascending')
fig

Question 7:¶

Show only the top 10 countries in the animation

Hint: Use the axis limit to set this.

In [99]:
# YOUR CODE HERE
# YOUR CODE HERE
fig = px.bar(df, x='pop', y='country', color='continent', animation_frame='year', animation_group='country',range_y=[131.5,141.5], range_x = [0,1.5e9])
fig.update_yaxes(categoryorder='total ascending')
fig
In [ ]:
 
In [ ]:
 
In [ ]: